package chd.edu.spzx.manager.service.impl;

import chd.edu.spzx.manager.service.ValidateCodeService;
import chd.edu.spzx.model.vo.system.ValidateCodeVo;
import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.CircleCaptcha;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.UUID;
import java.util.concurrent.TimeUnit;

/**
 * @author Zhang Chaoliang
 * create 2023
 */
@Service
public class ValidateCodeServiceImpl implements ValidateCodeService {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    /**
     * 生成图片验证码
     *
     * @return
     */
    @Override
    public ValidateCodeVo generateValidateCode() {

        //1 通过工具生成图片验证码
        // hutool
        //int width, int height, int codeCount, int circleCount
        CircleCaptcha circleCaptcha = CaptchaUtil.createCircleCaptcha(150, 48, 4, 2);
        //4位验证码值
        String codeValue = circleCaptcha.getCode();
        //返回图片验证码，Base64编码格式
        String imageBase64 = circleCaptcha.getImageBase64();

        //2 把验证码存储到redis中    Redis的key:uuid   value:验证码值
        //设置过期时间
        String key = UUID.randomUUID().toString().replace("-", "");

        redisTemplate.opsForValue().set("user:validate" + key ,
                                       codeValue ,
                                     5 ,
                                     TimeUnit.MINUTES);

        //3 返回ValidateCodeVo对象
        ValidateCodeVo validateCodeVo = new ValidateCodeVo() ;
        validateCodeVo.setCodeKey(key);
        validateCodeVo.setCodeValue("data:image/png;base64," + imageBase64);

        return validateCodeVo;
    }
}
